草庐IT

去 dep 和 fork 库

全部标签

c++ - 使用 fork() 和 execl() 进行输出重定向

我想使用fork()在我的程序中产生一个新进程。新进程只有一项任务:将鼠标输入重定向到串行端口。我已经在终端窗口中成功测试了以下命令:hexdump/dev/input/mice>/dev/ttyS0到目前为止,我已经成功地使用fork创建了一个子进程,但我的问题是我似乎无法让我的execl()方法正常工作:execl("/usr/bin/hexdump","hexdump","/dev/input/mice>/dev/ttyS0",(char*)NULL);我也试过其他变体,像这样:execl("/usr/bin/hexdump","hexdump","/dev/input/mice

c - 为什么我 fork 的进程将 systemd 作为它们的父进程?

我正在学习Linux中的fork(),这是我的程序:1#include2#include3#include4intmain(void){5intpid;6pid=fork();7if(pid有时它工作得很好,结果是这样的:./test1.outparentpid:27596ppid:21425pid:27599ppid:27597pid:27597ppid:27596pid:27598ppid:27597pid:27600ppid:27598但结果并不一致,通常情况下是这样的:parentpid:27566ppid:21425pid:27567ppid:27566pid:27568pp

更改 Fork() 系统调用

您好,我正在尝试创建一个系统调用来计算被调用的fork数。我打算更改fork系统调用,以便它有一个计数器来跟踪调用fork()的次数。我计划在fork.h中添加一个静态变量,然后在每次调用fork.c时递增该变量。我根本不明白fork.c中发生了什么。这是正确的方法吗? 最佳答案 Linux内核已经维护了整个系统中fork总数的计数。copy_process()执行的任务之一,它做了很多与fork有关的工作,是incrementthetotal_forkscounter.此计数器作为/proc/stat中的processes行向用户

linux - fork() copy-on-write 是一种稳定的暴露行为,可以用来实现只读共享内存吗?

fork()的手册页声明它不复制数据页,它将它们映射到子进程并放置一个写时复制标志。是那种行为:Linux风格之间是否一致?考虑了实现细节并因此可能会更改?我想知道我是否可以使用fork()作为以便宜的方式获得共享只读内存块的方法。如果内存是物理复制的,那将是相当昂贵的——有很多fork正在进行,而且数据区域足够大——但我希望不会…… 最佳答案 在没有MMU(内存管理单元)的机器上运行的Linux将复制fork()上的所有进程内存。但是,这些系统通常非常小并且是嵌入式的,您可能不必担心它们。许多服务,例如Apache的fork模型,

c - Linux fork() 和 wait()

我有一个难闻的问题:(我有这个代码:intmain(){pid_tchild,parent;intstatus=0;inti;printf("parent=%d\n",getpid());for(i=1;i0){printf("Exit=%d,child=%d\n",status/256,parent);}}输出类似于:1,213202,21321Exit=0,child=213213,21322Exit=0,child=213224,21323Exit=0,child=213235,21324Exit=0,child=21324而且我认为wait(0)不是等待所有子进程,而是只等待第

c - 如何检查 fork 进程是否仍在从 c 程序运行

我有一个fork进程的pid。现在,从我的c代码(在Linux上运行),我必须定期检查这个进程是否仍在运行或终止。我不想使用像wait()或waitpid()这样的阻塞调用。需要(最好)一个非阻塞系统调用,它只会检查此pid是否仍在运行并返回子进程的状态。最好和最简单的方法是什么? 最佳答案 waitpid()函数可以采用选项值WNOHANG来不阻塞。参见themanualpage,一如既往。也就是说,我不确定pids是否保证不会被系统回收,这会导致竞争条件。 关于c-如何检查fork进

python - 如何使用独立的 stdout、stderr 和 stdin fork 一个新进程?

我已经阅读了大部分关于subprocess和os.fork()的相关问题,包括所有关于双fork技巧的讨论。但是,这些解决方案似乎都不适用于我的场景。我想fork一个新进程并允许父进程(正常地)终止而不会搞砸子进程的stdin、stdout和stderr,也不会杀死子进程。我的第一次尝试是使用subprocess.Popen()。#!/usr/bin/pythonfromsubprocessimportcall,PopenPopen("/bin/bash",shell=True)call("echoHello>/tmp/FooBar",shell=True)这会失败,因为一旦父进程退出

python - 在 Django 中 fork 后关闭 TCP 端口 80 和 443

我正在尝试从在apache2/WSGIPython中运行的Django应用程序中fork()和exec()一个新的python脚本进程。新的python进程是守护进程,因此它与apache2没有任何关联,但我知道HTTP端口仍然打开。新进程终止了apache2,但结果是新python进程现在保持端口80和443打开,我不希望这样。如何从新的python进程中关闭端口80和443?有没有办法获得对套接字句柄描述符的访问权限,以便关闭它们? 最佳答案 如果您使用subprocess模块来执行脚本,则Popen构造函数的close_fds

c - GDB 在调试快速 fork 并执行另一个程序的多线程程序时崩溃

我正在使用GDB调试我的C程序,它有点不稳定,可能是因为我没有使用glibc,所以它在中断之前不会检测到新线程。我通过添加一个立即恢复的断点(如果为0则中断)来修复此问题。然而今天我撞墙了。我需要非常快的执行execve()所以正常的fork()是不可能的(会使用大量内存)而且我不能vfork()(我需要一个堆栈来设置管道等)所以我使用与该库(https://code.google.com/p/popen-noshell/)中相同的方法,基本上只使用CLONE_VM进行克隆。这(或者一般调用execve()-我真的不知道)让GDB出于某种原因真的很困惑-基本上它输出这样的东西:[New

c - 如何在 C 中的 fork 进程中查找共享/复制的内存页

我有一个在启动时加载大量资源的Linux服务器进程。这个过程将根据要求fork。在启动时加载的资源是最大的东西,在运行时不会改变。folked子进程使用读/写控制结构来处理对常量资源的请求。如何找出进程之间共享的内存量以及每个进程的唯一内存量?或者哪些页面由于来自任何进程的写访问而被复制? 最佳答案 您可以从/proc/$pid/pagemap和/proc/kpagecount和/proc/kpageflags虚拟文件中获取此信息在proc文件系统中。访问后者需要root,因为它可能会泄漏有关您不拥有的进程内存映射的特权信息。阅读内